/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * RealizarTareaView.java
 *
 * Created on 16-ene-2011, 17:26:15
 */

package Vista.TareaRealizada;

import Modelo.Entidades.Pregunta;
import Modelo.Entidades.Respuesta;
import Modelo.Entidades.RespuestaContestada;
import Modelo.Entidades.RespuestaContestadaImpl;
import Modelo.Entidades.Tarea;
import java.sql.Time;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/*
 *  Proyecto eJAM [G12]
 *  Miembros:
 *      - Javier Ruiz Hidalgo
 *      - Adrian Ramos Cápitas
 *      - Miguel Alejandro Esteban Ordóñez
 */

public class RealizarTareaView extends javax.swing.JFrame {

    private RespuestaContestadaTableModel respuestaContestadaTableModel;
    private RespuestaTableModel respuestasTableModel;
    private BandejaDeEntradaView bandejaDeEntradaView;
    private List<RespuestaContestada> respuestasContestada = null;
    private Tarea tarea = null;
    private Date fecha_inicio = null;

    /** Creates new form RealizarTareaView */
    public RealizarTareaView(BandejaDeEntradaView bandejaE, Tarea tarea) {
        this.respuestaContestadaTableModel = RespuestaContestadaTableModel.create();
        this.respuestasTableModel = RespuestaTableModel.create();
        this.tarea = tarea;
        this.bandejaDeEntradaView = bandejaE;
        this.respuestasContestada = new ArrayList();
        fecha_inicio = new Date();

        initComponents();
        this.setVisible(true);

        rellenaDatos();
        refreshRespuestasContestadas();

        CuentaAtras cuenta = new CuentaAtras(tarea.getDuracion().getMinutes(), this);
        cuenta.start();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanelPreguntas = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTablaPreguntasContestadas = new javax.swing.JTable();
        jPanelRespuestas = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTablaRespuestas = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane3 = new javax.swing.JScrollPane();
        jTextAreaPregunta = new javax.swing.JTextArea();
        jScrollPane4 = new javax.swing.JScrollPane();
        jTextAreaRespuesta = new javax.swing.JTextArea();
        jLabel2 = new javax.swing.JLabel();
        Contestar = new javax.swing.JButton();
        jFinalizar = new javax.swing.JButton();
        jSeparator1 = new javax.swing.JSeparator();
        jPanel1 = new javax.swing.JPanel();
        jTiempoRestante = new javax.swing.JLabel();
        jNombreTarea = new javax.swing.JLabel();
        jCerrar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Realización de Tarea");

        jPanelPreguntas.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Escoja una Pregunta", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

        jTablaPreguntasContestadas.setModel(respuestaContestadaTableModel);
        jTablaPreguntasContestadas.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTablaPreguntasContestadasMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jTablaPreguntasContestadas);

        javax.swing.GroupLayout jPanelPreguntasLayout = new javax.swing.GroupLayout(jPanelPreguntas);
        jPanelPreguntas.setLayout(jPanelPreguntasLayout);
        jPanelPreguntasLayout.setHorizontalGroup(
            jPanelPreguntasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelPreguntasLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 748, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanelPreguntasLayout.setVerticalGroup(
            jPanelPreguntasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelPreguntasLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 208, Short.MAX_VALUE)
                .addContainerGap())
        );

        jPanelRespuestas.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Escoja una Respuesta", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1, 11))); // NOI18N

        jTablaRespuestas.setModel(respuestasTableModel);
        jTablaRespuestas.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTablaRespuestasMouseClicked(evt);
            }
        });
        jScrollPane2.setViewportView(jTablaRespuestas);

        jLabel1.setText("Respuesta: ");
        jLabel1.setMaximumSize(new java.awt.Dimension(50, 14));

        jScrollPane3.setPreferredSize(new java.awt.Dimension(150, 150));

        jTextAreaPregunta.setColumns(20);
        jTextAreaPregunta.setEditable(false);
        jTextAreaPregunta.setRows(2);
        jTextAreaPregunta.setPreferredSize(new java.awt.Dimension(50, 94));
        jScrollPane3.setViewportView(jTextAreaPregunta);

        jScrollPane4.setPreferredSize(new java.awt.Dimension(150, 150));

        jTextAreaRespuesta.setColumns(20);
        jTextAreaRespuesta.setEditable(false);
        jTextAreaRespuesta.setRows(5);
        jTextAreaRespuesta.setPreferredSize(new java.awt.Dimension(50, 94));
        jScrollPane4.setViewportView(jTextAreaRespuesta);

        jLabel2.setText("Pregunta: ");
        jLabel2.setMaximumSize(new java.awt.Dimension(50, 14));

        Contestar.setText("Contestar");
        Contestar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ContestarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanelRespuestasLayout = new javax.swing.GroupLayout(jPanelRespuestas);
        jPanelRespuestas.setLayout(jPanelRespuestasLayout);
        jPanelRespuestasLayout.setHorizontalGroup(
            jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRespuestasLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(Contestar, javax.swing.GroupLayout.DEFAULT_SIZE, 386, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelRespuestasLayout.createSequentialGroup()
                        .addGroup(jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE)
                            .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 324, Short.MAX_VALUE))))
                .addGap(26, 26, 26)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        jPanelRespuestasLayout.setVerticalGroup(
            jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelRespuestasLayout.createSequentialGroup()
                .addGroup(jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 226, Short.MAX_VALUE)
                    .addGroup(jPanelRespuestasLayout.createSequentialGroup()
                        .addGroup(jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE))
                        .addGap(18, 26, Short.MAX_VALUE)
                        .addGroup(jPanelRespuestasLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 78, Short.MAX_VALUE)
                            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 78, Short.MAX_VALUE))
                        .addGap(18, 18, 18)
                        .addComponent(Contestar)))
                .addContainerGap())
        );

        jFinalizar.setText("Finalizar");
        jFinalizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jFinalizarActionPerformed(evt);
            }
        });

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Contador de Tiempo"));

        jTiempoRestante.setFont(new java.awt.Font("Aharoni", 1, 28)); // NOI18N
        jTiempoRestante.setForeground(new java.awt.Color(255, 0, 0));
        jTiempoRestante.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTiempoRestante, javax.swing.GroupLayout.DEFAULT_SIZE, 101, Short.MAX_VALUE)
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addComponent(jTiempoRestante, javax.swing.GroupLayout.DEFAULT_SIZE, 24, Short.MAX_VALUE)
                .addContainerGap())
        );

        jNombreTarea.setFont(new java.awt.Font("Calibri", 3, 24));
        jNombreTarea.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);

        jCerrar.setText("Cerrar");
        jCerrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jCerrarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jPanelRespuestas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 780, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jNombreTarea, javax.swing.GroupLayout.DEFAULT_SIZE, 643, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(jPanelPreguntas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jFinalizar, javax.swing.GroupLayout.PREFERRED_SIZE, 183, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(jCerrar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jNombreTarea, javax.swing.GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)
                    .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jPanelPreguntas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jPanelRespuestas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jCerrar)
                    .addComponent(jFinalizar))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jTablaPreguntasContestadasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTablaPreguntasContestadasMouseClicked
        int num, i = 0;
        boolean enc = false;
        
        RespuestaContestadaTableModel rctm = (RespuestaContestadaTableModel)this.jTablaPreguntasContestadas.getModel();
        RespuestaContestada respuestaContestada = rctm.getRow(this.jTablaPreguntasContestadas.getSelectedRow());

        num = respuestaContestada.getPregunta().getNumP();

        while(i < tarea.getPreguntas().size() && !enc){
            if(tarea.getPreguntas().get(i).getNumP() != num){
                i++;
            }
            else{
                enc = true;
            }
        }
        
        refreshRespuestas(tarea.getPreguntas().get(i).getRespuestas());
        this.jTextAreaPregunta.setText(tarea.getPreguntas().get(i).getDescripcion());
        this.jTextAreaRespuesta.setText("");
    }//GEN-LAST:event_jTablaPreguntasContestadasMouseClicked

    private void jTablaRespuestasMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTablaRespuestasMouseClicked
        RespuestaTableModel rtm = (RespuestaTableModel)this.jTablaRespuestas.getModel();
        Respuesta respuesta = rtm.getRow(this.jTablaRespuestas.getSelectedRow());

        this.jTextAreaRespuesta.setText(respuesta.getDescripcion());
    }//GEN-LAST:event_jTablaRespuestasMouseClicked

    private void ContestarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ContestarActionPerformed
        boolean enc = false;
        int i = 0, num, row1, row2;

        RespuestaTableModel rtm = (RespuestaTableModel)this.jTablaRespuestas.getModel();
        row1 = this.jTablaRespuestas.getSelectedRow();

        if(row1 > -1){
            Respuesta respuesta = rtm.getRow(row1);

            RespuestaContestadaTableModel rctm = (RespuestaContestadaTableModel)this.jTablaPreguntasContestadas.getModel();
            row2 = this.jTablaPreguntasContestadas.getSelectedRow();
            
            if(row2 > -1){
                RespuestaContestada respuestaContestada = rctm.getRow(row2);

                respuestaContestada.setRespuesta(respuesta);

                num = respuestaContestada.getPregunta().getNumP();

                while(i < respuestasContestada.size() && !enc){
                    if(respuestasContestada.get(i).getPregunta().getNumP() != num){
                        i++;
                    }
                    else{
                        enc = true;
                    }
                }

                respuestasContestada.get(i).setRespuesta(respuesta);

                refreshRespuestasContestadas();
            }
        }
    }//GEN-LAST:event_ContestarActionPerformed

    private void jFinalizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jFinalizarActionPerformed
        int min, seg, longitud;
        longitud = this.jTiempoRestante.getText().length();
        seg = Integer.parseInt(this.jTiempoRestante.getText().substring(longitud - 2));
        min = Integer.parseInt(this.jTiempoRestante.getText().substring(0, longitud - 3));

        this.dispose();
        
        this.bandejaDeEntradaView.evaluacionFinalizada(respuestasContestada, new Time(0, min, seg), fecha_inicio);
    }//GEN-LAST:event_jFinalizarActionPerformed

    private void jCerrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCerrarActionPerformed
        this.respuestasContestada = null;
        this.jFinalizarActionPerformed(evt);
        this.dispose();
    }//GEN-LAST:event_jCerrarActionPerformed

    /**
    * @param args the command line arguments
    */

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton Contestar;
    private javax.swing.JButton jCerrar;
    private javax.swing.JButton jFinalizar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jNombreTarea;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanelPreguntas;
    private javax.swing.JPanel jPanelRespuestas;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JScrollPane jScrollPane4;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTable jTablaPreguntasContestadas;
    private javax.swing.JTable jTablaRespuestas;
    private javax.swing.JTextArea jTextAreaPregunta;
    private javax.swing.JTextArea jTextAreaRespuesta;
    private javax.swing.JLabel jTiempoRestante;
    // End of variables declaration//GEN-END:variables

    private void rellenaDatos() {
        RespuestaContestada rc = null;

        for(Pregunta p: tarea.getPreguntas()){
            rc= new RespuestaContestadaImpl(p, null);
            respuestasContestada.add(rc);
        }

        this.jNombreTarea.setText(tarea.getNombre());
    }

    private void refreshRespuestasContestadas() {
        this.respuestaContestadaTableModel.setRespuestasContestadas(respuestasContestada);
    }

    private void refreshRespuestas(List<Respuesta> respuestas) {
        this.respuestasTableModel.setRespuestas(respuestas);
    }

    public void actualizarCuentaAtras(String tiempo) {
        this.jTiempoRestante.setText(tiempo);
    }

    public void finTiempo() {
        this.respuestasContestada = null;
        this.jFinalizarActionPerformed(null);
    }

}
